home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload Trio 2
/
Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO
/
dir40
/
pc37042.zip
/
UTIL
/
T370.ALC
< prev
Wrap
Text File
|
1988-01-03
|
28KB
|
954 lines
TITLE 'T370 - CONVERT A370 OBJ FILE TO 370 OBJECT FORMAT'
*
* PGM-ID. T370.ALC
* AUTHOR. DON HIGGINS.
* DATE. 08/13/87.
* REMARKS. THIS PROGRAM READS OBJ FILE CREATED BY A370 AND
* CREATES 370 RELOCATABLE OBJECT DECK FILE.
* MAINTENANCE.
*
* 08/16/87 COMPLETE INITIAL CODING.
* 08/19/87 COMPLETE INITAL DEBUGGING AND DOCUMENTATION REL 1.0
* 01/03/88 USE STD. OS PARM REL 1.1
*
*
*
* PARMS. T370 FILE/LCP
*
* FILE IS NAME OF FILE OF THE TYPE FILE.OBJ.
* OUTPUT OF T370 IS FILE OF THE TYPE FILE.370.
* THE OPTIONAL PARMS ARE AS FOLLOWS:
*
* L - LIST FORMATTED HEX OBJECT RECORDS IN FILE.HEX (DEFAULT OFF).
* C - LIST FORMATTED HEX OBJECT RECORDS ON CONSOLE (DEFAULT OFF).
* P - OUTPUT 370 EBCDIC OBJECT RECORDS TO FILE.370. (DEFAULT ON).
*
* CODING P ON PARM, TURNS 370 OUTPUT FILE OFF.
*
* THE FORMAT OF THE OBJECT RECORDS IS AS FOLLOWS:
*
* TYPE COLUMN DESCRIPTION
*
* ESD 01-01 X'02' EXTERNAL SYMBOL DICTIONARY ID
* 02-04 C'ESD'
* 05-10 BLANK
* 11-12 NUMBER OF BYTES OF ESD DATA
* 13-14 BLANK
* 15-16 ESD IDENTIFIER OF FIRST ITEM OR BLANK FOR LD
* 17-72 ESD ENTRIES (UP TO 3) AS FOLLOWS:
* 01-08 NAME OF SD, LD, ER
* 09-09 TYPE (HEX)
* 00 - SD
* 01 - LD
* 02 - ER
* 10-12 23 BIT ADDRESS (SD,PC,LD)
* 13-13 ALIGNMENT FACTOR (HEX)
* 07 - DOUBLEWORD
* 03 - WORD ALIGNMENT
* 01 - HALF WORD
* 00 - BYTE ALIGNMENT
* 14-16 ZERO IF LENGTH ON END RECORD
* LENGTH OF CONTROL SECTION
* IDENTIFIER OF SD CONTAINING NAME
* BLANK IF ER
* 73-80 RECORD SEQUENCE FIELD NOT USED BY LINKERS
*
* TXT 01-01 X'02'
* 02-04 C'TXT'
* 05-05 BLANK
* 06-08 24 BIT ADDRESS OF FIRST BYTE OF TEXT
* 09-10 BLANK
* 11-12 NUMBER OF BYTES OF TEXT
* 13-14 BLANK
* 15-16 ESD IDENTIFIER OF SD CONTAINING THIS TEXT
* 17-72 TEXT DATA
* 73-80 RECORD SEQUENCE FIELD NOT USED BY LINKERS
*
* RLD 01-01 X'02'
* 02-04 C'RLD'
* 05-10 BLANK
* 11-12 NUMBER OF BYTES OF RLD DATA
* 13-16 BLANK
* 17-72 RLD DATA ENTRIES AS FOLLOWS:
* 01-02 ESDID OF CESD ENTRY FOR SYMBOL BEING DEFINED
* 03-04 ESDID OF SD CONTAINING ADDRESS CONSTANT
* 05-05 FLAG FIELD (TTTTLLST)
*
* TTTT - 0000 NONBRANCH
* 0001 BRANCH
* 0011 PSEUDO REGISTER
* LL - 01 TWO BYTES
* 10 THREE BYTES
* 11 FOUR BYTES
* S - 0 POSITIVE RELOCATION
* 1 NEGATIVE RELOCATION
* T - 0 NEXT RLD ENTRY HAS POINTERS
* 1 NEXT RLD HAS SAME POINTERS
* (BYTES 01-04 OMITTED FOR NEXT)
*
* 73-80 RECORD SEQUENCE FIELD NOT USED BY LINKERS
*
* END 01-01 X'02'
* 02-04 C'END'
* 05-05 BLANK
* 06-08 24 BIT ADDRESS OF ENTRY POINT (OPTIONAL)
* 09-14 BLANK
* 15-16 ESDID OF SD CONTAINING ENTRY
* 17-28 BLANK
* 29-32 CONTROL SECTION LENGTH IF NOT IN SD
* (29=X'00' IF PRESENT)
* 33-72 BLANK
* 73-80 RECORD SEQUENCE FIELD NOT USED
*
* THE INPUT FILE FORMAT IS AN EXTENSION OF MICROSOFT
* M80 MACRO ASSEMBLER RELOCATABLE BIT STREAM FILE.
*
* FOR EXAMPLE, RUN BAT\RUNUTIL.BAT.
*
T370 CSECT
LR R12,R15
LA R13,2048(R12)
LA R13,2048(R13)
USING T370,R12
USING T370+4096,R13
LA R2,=C'T370.COM R1.1 - CONVERT PC/370 OBJ FILE TO 370 FILE$'
SVC WTO
BAL R14,INIT GET PARMS AND INITIALIZE FILES
BNZ EOJ
SR R6,R6 NO BITS
LA R7,UT1RCD+L'UT1RCD FORCE BUFFER RELOAD
LA R8,4
LA R9,UT1RCD+L'UT1RCD END OF BUFFER FOR BXH
LOOP EQU *
BAL R14,GBIT IF NEXT BIT 0, NEXT BYTE IS ABS TEXT
BNZ NOTTXT
TXTTYPE EQU * GET NEXT ABS BYTE AND STORE IN TXT RECORD
BAL R14,GBYTE
LM R1,R3,TXTREGS
STC R4,0(R1) SAVE BYTE IN TEXT TABLE
LA R1,1(R1) INC TABLE POINTER
LA R3,1(R3) INC BYTE COUNT
STM R1,R3,TXTREGS
CLR R1,R2
BL LOOP IF TXT RECORD NOT FULL, CONTINUE
BAL R14,PUTTXT
B LOOP
NOTTXT EQU * GET NEXT TWO BITS TO FORM 3 BIT TYPE OF ENTRY
LR R3,R4
SLL R3,1
BAL R14,GBIT
OR R3,R4
SLL R3,1
BAL R14,GBIT
OR R3,R4 R3 = THREE BIT TYPE
CLM R3,1,=AL1(LNKTYP)
BE LNKTYPE IF LINK TYPE, GO PROCESS ESD, RLD, ETC.
RELTYPE EQU * ELSE 16 BIT RELOCATED WORD
LA R2,=C'RELATIVE 16 BIT WORDS NOT ALLOWED IN 370 OBJ$'
SVC WTO
B EOJ
LNKTYPE EQU * BRANCH TO TYPE OF SPECIAL LINKAGE ENTRY
BAL R14,GBIT BASED ON NEXT 4 BIT TYPE CODE
LR R3,R4
SLL R3,1
BAL R14,GBIT
OR R3,R4
SLL R3,1
BAL R14,GBIT
OR R3,R4
SLL R3,1
BAL R14,GBIT
OR R3,R4 R3 = LINK TYPE
AR R3,R3
AR R3,R3
L R4,LNKRTN(R3) R4 = ADDRESS OF LINK ROUTINE LT0-LTF
BAL R14,PUTTXT FLUSH TXT BEFORE PROCESSING LINK TYPE
BR R4 JUMP
EOJ EQU * END OF FILE AT PHYSICAL EOF OR ERROR
LA R2,SYSUT1
SVC CLOSE CLOSE INPUT
CLI OPTIONP,TRUE
BNE SKPCLSP
LA R2,SYSUT2
SVC CLOSE CLOSE 370 IF OPEN
SKPCLSP EQU *
CLI OPTIONL,TRUE
BNE SKPCLSL
LA R2,SYSPRINT
SVC CLOSE CLOSE HEX IF OPEN
SKPCLSL EQU *
LA R2,=C'T370 COMPLETE$'
SVC WTO
SVC EXIT
INIT EQU * GET FILE NAMES FROM PARM AND SET OPTIONS
L R1,0(R1)
LH R0,0(R1)
SH R0,=H'1'
BNP INITERR NO FILE SPECIFIED
LA R2,3(R1) SKIP BLANK CHAR LEADING FILENAME
LR R1,R0
LR R3,R0 SAVE FOR INITFILE
FINDSLSH EQU *
CLI 0(R2),C'/'
BE SETOPT
LA R2,1(R2)
BCT R1,FINDSLSH
NOTFOUND EQU * NO OPTIONS SPECIFIED
LR R1,R3
INITFILE EQU * BUILD FILE NAMES WITH SUFFIXES
EX R1,MVCUT1
EX R1,MVCUT2
EX R1,MVCPRT
LA R2,UT1DSN(R1)
MVC 0(5,R2),UT1SFX
LA R2,UT2DSN(R1)
MVC 0(5,R2),UT2SFX
LA R2,PRTDSN(R1)
MVC 0(5,R2),PRTSFX
LA R2,=C' $'
SVC WTO
LA R2,OPTLINE DISPLAY OPTIONS SET
SVC WTO
LA R2,=C' $'
SVC WTO
LA R2,SYSUT1
SVC SEARCH ISSUE ERROR IF OBJ FILE NOT FOUND
CLM R0,1,=X'00'
BNE INITERR
LA R2,SYSUT1
SVC OPEN OPEN OBJ INPUT
CLI OPTIONP,TRUE
BNE SKPOPNP
LA R2,SYSUT2
SVC OPEN OPEN 370 OUTPUT
SKPOPNP EQU *
CLI OPTIONL,TRUE
BNE SKPOPNL
LA R2,SYSPRINT
SVC OPEN OPEN HEX OUTPUT
SKPOPNL EQU *
SR R0,R0
BR R14
INITERR EQU *
LA R2,=C'INVALID FILE NAME$'
SVC WTO
SVC EXIT
MVCUT1 MVC UT1DSN(0),TBUFF+7
MVCUT2 MVC UT2DSN(0),TBUFF+7
MVCPRT MVC PRTDSN(0),TBUFF+7
SETOPT EQU *
LR R0,R2
S R0,=A(TBUFF+7) CALC LENGTH OF DSN
BZ OPTERR NO FILE SINCE / IS FIRST CHAR
LA R2,1(R2)
BCT R1,OPTLOOP
B OPTERR
OPTLOOP EQU *
CLI 0(R2),C'P'
BE SETOPTP
CLI 0(R2),C'L'
BE SETOPTL
CLI 0(R2),C'C'
BE SETOPTC
OPTERR EQU *
LA R2,=C'INVALID PARM$'
SVC WTO
SVC EXIT
SETOPTP EQU *
MVI OPTIONP,FALSE TURN OFF OUTPUT OF 370 OBJECT FILE (.370)
MVI DOPTP,C' '
NEXTOP EQU *
LA R2,1(R2)
BCT R1,OPTLOOP
LR R1,R0 PUT LENGTH OF DSN UP TO SLASH IN R1
MVC OPTHEX,OPTIONL
OC OPTHEX,OPTIONC SET HEX TRUE IF ANY HEX OUTPUT REQ'D
B INITFILE
SETOPTL EQU *
MVI OPTIONL,TRUE TURN ON HEX LISTING FILE (.HEX)
MVI DOPTL,C'L'
B NEXTOP
SETOPTC EQU *
MVI OPTIONC,TRUE TURN ON OUTPUT OF HEX CONSOLE LISTING
MVI DOPTC,C'C'
B NEXTOP
GBIT EQU * GET NEXT BIT IN R4
SR R4,R4
LTR R6,R6
BNZ GBITNOW
BAL R10,GWORD GET NEXT WORD IF NO BITS AVAIL.
GBITNOW EQU *
SLDL R4,1 MOVE NEXT BIT FROM R5 TO R4
BCTR R6,0 DEC BIT COUNT IN R6
LTR R4,R4 SET CC
BR R14 EXIT
GWORD EQU * GET NEXT 32 BITS IN R5 AND RESET R6 BIT COUNT
L R5,0(R7) LOAD NEXT WORD
BXH R7,R8,GREAD INCR R7 BY 4 AND CHECK IF WORD IN BLOCK
LA R6,32 RELOAD BIT COUNTER
BR R10 EXIT WITH NEXT WORD
GREAD EQU * GET NEXT 128 BYTE OBJ RECORD AND LOAD WORD
LA R1,UT1RCD
LA R2,SYSUT1
SVC GET READ NEXT BLOCK OR EXIT TO EOJ
LA R7,UT1RCD RESET RECORD PTR FOR GWORD BXH
B GWORD
GBYTE EQU * GET NEXT BYTE IN R4
SR R4,R4
LR R1,R6 SAVE BIT COUNT
SH R6,=H'8' ARE THERE 8 BITS LEFT
BM GSPLIT NO, GET MISSING BITS FROM NEXT WORD
SLDL R4,8 YES, SHIFT ALL 8
BR R14 EXIT
GSPLIT EQU *
SLDL R4,0(R1) SHIFT REMAINING BITS IN CURRENT WORD
LA R11,8
SR R11,R1 CALC REMAINING BITS TO SHIFT IN R11
BAL R10,GWORD GET NEXT WORD
SLDL R4,0(R11) SHIFT REST OF BYTE FROM NEW WORD
SR R6,R11 DEC BIT COUNTER BY REMAINING BITS SHIFTED
BR R14 EXIT
LT0 EQU *
LT1 EQU *
LT2 EQU *
LT3 EQU *
LA R2,=C'INVALID LT0-LT3 RECORD TYPE$'
SVC WTO
SVC TRACE
DC C'BUG '
B *
LT4 EQU * PROCESS EXTENDED TYPE 4 LINK ENTRY
BAL R14,GBIT
BAL R14,GBIT
BAL R14,GBYTE
STC R4,LT4TYP ESD TYPE
BAL R14,GBYTE
STC R4,LT4EID ESD EID
CLI LT4TYP,ESDER
BE LT4B GO GET SYMBOL FOR ER
BAL R14,GBYTE
STC R4,ADDR+3
BAL R14,GBYTE
STC R4,ADDR+2
BAL R14,GBYTE
STC R4,ADDR+1
BAL R14,GBYTE
STC R4,ADDR+0 ESD ADDRESS
CLI LT4TYP,ESDSD
BNE CHKTYP
BAL R14,GBYTE
STC R4,SDLNG+3
BAL R14,GBYTE
STC R4,SDLNG+2
BAL R14,GBYTE
STC R4,SDLNG+1
BAL R14,GBYTE
STC R4,SDLNG+0 ESD LENGTH
B LT4B GO GET SYMBOL FOR SD
CHKTYP EQU *
CLI LT4TYP,ESDLD
BE LT4B GO GET SYMBOL FOR LD
CLI LT4TYP,ESDORG
BE LT4ORG
CLI LT4TYP,ESDEND
BE LT4END
SR R0,R0
IC R0,LT4TYP
N R0,=X'0000000F'
CLM R0,1,=AL1(ESDRLD)
BE LT4RLD
LT4ERR EQU *
LA R2,=C'INVALID TYPE 4 LINK RECORD$'
SVC WTO
SVC TRACE
DC C'BUG '
B *
LT4B EQU * GET SYMBOL FOR SD, LD, OR ER
BAL R14,GBIT
LR R3,R4
BAL R14,GBIT
SLL R3,1
OR R3,R4
BAL R14,GBIT
SLL R3,1
OR R3,R4 R3 = LENGTH OF SYMBOL
MVC SYMBOL,=8AL1(ASCBLK)
MVC ASYMBOL,=A(SYMBOL)
CH R3,=H'7'
BH GBERR
LTR R3,R3
BP LT4LP
LA R3,8 ZERO LENGTH MEANS 8 BYTE SYMBOL
LT4LP EQU *
BAL R14,GBYTE
L R1,ASYMBOL
STC R4,0(R1)
LA R1,1(R1)
ST R1,ASYMBOL
BCT R3,LT4LP
LA R1,SYMBOL
LA R2,8
SVC ASCEBC CONVERT SYMBOL TO EBCDIC
CLI LT4TYP,ESDSD
BE LT4SD
CLI LT4TYP,ESDER
BE LT4ER
CLI LT4TYP,ESDLD
BE LT4LD
B LT4ERR
GBERR EQU *
LA R2,=C'INVALID SYMBOL LENGTH FOR LT4$'
SVC WTO
SVC TRACE
DC C'BUG '
B *
LT4SD EQU * PROCESS SD ENTRY
SR R0,R0
IC R0,LT4EID
STCM R0,3,ESDEID
MVC ESDCNT,=H'16'
MVC ESDBUF(8),SYMBOL
MVI ESDBUF+8,X'00' SD TYPE
MVC ESDBUF+9(3),ADDR+1
MVI ESDBUF+12,X'03' AMODE=ANY (01=24 BIT, 00=31 BIT)
MVC ESDBUF+13(3),SDLNG+1
LA R1,ESDRCD
BAL R10,PUTOBJ OUTPUT 370 RECORD
CLI OPTHEX,TRUE CHECK IF ANY HEX OUTPUT REQ'D
BNE SKPSDL NO, SKIP FORMATTING
SR R0,R0
IC R0,LT4EID
BAL R14,CVTHEX
MVC ESDDEID,HEX+6
MVC ESDDSYM,SYMBOL
L R0,ADDR
BAL R14,CVTHEX
MVC ESDDADDR,HEX+2
L R0,SDLNG
BAL R14,CVTHEX
MVC ESDDLNG,HEX+2
MVC ESDDTYP,=C'SD'
LA R1,ESDLINE
BAL R10,PUTPRT
SKPSDL EQU *
B LOOP
LT4ER EQU * PROCESS ER ENTRY
SR R0,R0
IC R0,LT4EID
STCM R0,3,ESDEID
MVC ESDCNT,=H'16'
MVC ESDBUF(8),SYMBOL
MVI ESDBUF+8,X'02' ER TYPE
MVC ESDBUF+9(7),=7C' '
LA R1,ESDRCD
BAL R10,PUTOBJ
CLI OPTHEX,TRUE
BNE SKPERL
SR R0,R0
IC R0,LT4EID
BAL R14,CVTHEX
MVC ESDDEID,HEX+6
MVC ESDDSYM,SYMBOL
MVC ESDDADDR,=6C' '
MVC ESDDLNG,=6C' '
MVC ESDDTYP,=C'ER'
LA R1,ESDLINE
BAL R10,PUTPRT
SKPERL EQU *
B LOOP
LT4LD EQU * PROCESS LD ENTRY
MVC ESDEID,=2C' ' BLANK ESD EID FOR LD
MVC ESDCNT,=H'16'
MVC ESDBUF(8),SYMBOL
MVI ESDBUF+8,X'01' LD TYPE
MVC ESDBUF+9(3),ADDR+1
MVI ESDBUF+12,C' '
SR R0,R0
IC R0,LT4EID
STCM R0,7,ESDBUF+13 EID FOR LD
LA R1,ESDRCD
BAL R10,PUTOBJ
CLI OPTHEX,TRUE
BNE SKPLDL
SR R0,R0
IC R0,LT4EID
BAL R14,CVTHEX
MVC ESDDEID,HEX+6
MVC ESDDSYM,SYMBOL
L R0,ADDR
BAL R14,CVTHEX
MVC ESDDADDR,HEX+2
MVC ESDDLNG,=6C' '
MVC ESDDTYP,=C'LD'
LA R1,ESDLINE
BAL R10,PUTPRT
SKPLDL EQU *
B LOOP
LT4RLD EQU * PROCESS RLD ENTRY
BAL R14,GBYTE
STC R4,RLDEID RLD EID
MVC RLDCNT,=H'8'
SR R0,R0
IC R0,RLDEID
STCM R0,3,RLDBUF+2 EID FOR SD WITH RLD
IC R0,LT4EID
STCM R0,3,RLDBUF+0 EID FOR SYMBOL
IC R0,LT4TYP R0 = SLLLTTTT (SIGN, RLD LNG, RLD TYPE)
LR R1,R0 SAVE SIGN BIT IN R1
N R0,=X'00000070' R0 = 0LLL0000 WHERE LLL = 2-4
SH R0,=H'16' R0 = 00NN0000 WHERE NNN = 1-3
SRL R0,2 R0 = 0000NN00
N R1,=X'00000080' R1 = S0000000
SRL R1,6 R1 = 000000S0
OR R0,R1 R0 = 0000NNS0
STC R0,RLDBUF+4 RLD LNG (01=2, 02=3, 3=4) PLUS SIGN
MVC RLDBUF+5(3),ADDR+1
LA R1,RLDRCD
BAL R10,PUTOBJ
CLI OPTHEX,TRUE
BNE SKPRLDL
SR R0,R0
IC R0,LT4EID
BAL R14,CVTHEX
MVC RLDDEID,HEX+6 EID OF SYMBOL REFERENCED
SR R0,R0
IC R0,RLDEID
BAL R14,CVTHEX
MVC RLDDSID,HEX+6 EID OF CONTROL SECTION WITH RLD
SR R0,R0
IC R0,RLDBUF+4 USE FORMATTED TTTTLLS0 TO GET LNG AND SIGN
SRL R0,2
AH R0,=H'1'
BAL R14,CVTHEX
MVC RLDDLNG,HEX+6
IC R0,RLDBUF+4
N R0,=X'00000002'
BZ LT4RSP
MVI RLDDSGN,C'-'
B LT4RSC
LT4RSP EQU *
MVI RLDDSGN,C'+'
LT4RSC EQU *
L R0,ADDR
BAL R14,CVTHEX
MVC RLDDADDR,HEX+2
LA R1,RLDLINE
BAL R10,PUTPRT
SKPRLDL EQU *
B LOOP
LT4ORG EQU * PROCESS ORG ENTRY WHICH RESETS TXT EID AND ADDRESS
SR R0,R0
IC R0,LT4EID
STCM R0,3,TXTEID SET TXT EID
MVC TXTADDR,ADDR+1 SET TXT ADDR
B LOOP
LT4END EQU * PROCESS END ENTRY
LR R7,R9 FORCE END OF RECORD
SR R6,R6 FORCE NO BITS
SR R0,R0
IC R0,LT4EID
STCM R0,3,ENDEID EID FOR ENTRY ADDRESS
MVC ENDADDR,ADDR+1
LA R1,ENDRCD
BAL R10,PUTOBJ
CLI OPTHEX,TRUE
BNE SKPENDL
SR R0,R0
IC R0,LT4EID
BAL R14,CVTHEX
MVC ENDDEID,HEX+6
L R0,ADDR
BAL R14,CVTHEX
MVC ENDDADDR,HEX+2
LA R1,ENDLINE
BAL R10,PUTPRT
SKPENDL EQU *
B LOOP
LT5 EQU *
LT6 EQU *
LT7 EQU *
LT8 EQU *
LT9 EQU *
LTA EQU *
LTB EQU *
LTC EQU *
LTD EQU *
LTE EQU *
LTF EQU *
LA R2,=C'INVALID LT5-LTF RECORD TYPE$'
SVC WTO
SVC TRACE
DC C'BUG '
B *
PUTTXT EQU * FLUSH CURRENT TXT RCD IF ANY
LM R1,R3,TXTREGS
LTR R3,R3
BZ 0(R14) EXIT IF NO TEXT
ST R14,TXTSAV
L R1,ADDR FORMAT ADDRESS
STCM R1,7,TXTADDR
SR R1,R1
IC R1,LT4EID FORMAT EID
STCM R1,3,TXTEID
IC R1,TXTREGS+11 FORMAT BYTE COUNT
STCM R1,3,TXTCNT
LA R0,55
SR R0,R1 R0 = PAD BLKS - 1
BM SKPTPAD
LA R2,TXTBUF(R1)
LR R1,R0
EX R1,MVCTPAD
SKPTPAD EQU *
LA R1,TXTRCD
BAL R10,PUTOBJ
CLI OPTHEX,TRUE
BNE TXTEXT
L R0,ADDR FORMAT TEXT ADDRESS
BAL R14,CVTHEX
MVC TXTDADDR,HEX+2
IC R0,LT4EID FORMAT CNT AND EID
ICM R0,2,TXTREGS+11
BAL R14,CVTHEX
MVC TXTDCNT,HEX+4
MVC TXTDEID,HEX+6
L R11,TXTREGS+8 REMAINING BYTE COUNT 1-56
LA R1,TXTBUF TEXT POINTER
BAL R14,FMTTXT PRINT FIRST LINE WITH 16 BYTES
SH R11,=H'16'
BNP TXTEXT
MVC TXTDBLK,=CL13' ' BLANK TXT ADDR,CNT,EID FOR MULT. LINES
LA R1,TXTBUF+16
BAL R14,FMTTXT 2ND
SH R11,=H'16'
BNP TXTEXT
MVC TXTDBLK,=CL13' ' BLANK TXT ADDR,CNT,EID FOR MULT. LINES
LA R1,TXTBUF+32
BAL R14,FMTTXT 3RD
SH R11,=H'16'
BNP TXTEXT
MVC TXTDBLK,=CL13' ' BLANK TXT ADDR,CNT,EID FOR MULT. LINES
LA R1,TXTBUF+48
BAL R14,FMTTXT 4TH
TXTEXT EQU *
L R0,ADDR
A R0,TXTREGS+8 INCR TXT ADDR BY LENGTH
ST R0,ADDR
MVC TXTREGS(12),=A(TXTBUF,TXTBUF+L'TXTBUF,0) RESET REGS
L R14,TXTSAV
BR R14
FMTTXT EQU * FORMAT TEXT AT R1 FOR LENGTH (R3)
ST R14,FMTSAV
MVC TXTDASC,0(R1)
TR TXTDASC,PRTASC
LA R2,TXTDHEX
LA R3,4
FMTL1 EQU *
L R0,0(R1)
BAL R14,CVTHEX
MVC 0(8,R2),HEX
LA R1,4(R1)
LA R2,8(R2)
BCT R3,FMTL1
CL R11,=F'16'
BNL FMTSKP
LR R1,R11
AR R1,R1
LA R2,TXTDHEX(R1)
LA R0,31
SR R0,R1
LR R1,R0
EX R1,MVCTPAD PAD HEX WITH BLANKS
LA R1,15
SR R1,R11
LA R2,TXTDASC(R11)
EX R1,MVCTPAD PAD ASC WITH BLANKS
FMTSKP EQU *
LA R1,TXTLINE
BAL R10,PUTPRT
L R14,FMTSAV
BR R14
MVCTPAD MVC 0(0,R2),=56C' '
CVTHEX EQU * CONVERT R0 TO H8 BYTE EBCDIC HEX
ST R0,WORK
UNPK HEX(9),WORK(5)
TR HEX(8),HEXTAB-240
BR R14
PUTOBJ EQU * OUTPUT SEQUENCED 370 OBJECT DECK FILE
AP PSEQ,=P'1'
UNPK 72(8,R1),PSEQ
OI 79(R1),X'F0'
CLI OPTIONP,TRUE
BNER R10
LA R2,SYSUT2
SVC PUT OUTPUT 370 OBJECT FILE FOR OPTION P
BR R10
PUTPRT EQU * OUTPUT SEQUENCED ASCII HEX LISTING FILE
MVC 0(6,R1),=X'402020202020' MASK FOR ZZZZZ
ED 0(6,R1),PSEQ+1
CLI OPTIONC,TRUE
BNE SKPOPTC
LR R2,R1
SVC WTO LIST HEX ON CONSOLE FOR OPTION C
SKPOPTC EQU *
CLI OPTIONL,TRUE
BNER R10
LA R2,SYSPRINT
SVC PUT OUTPUT HEX FILE FOR OPTION L
BR R10
*
* REGISTER USAGE
*
R0 EQU 0 WORK
R1 EQU 1 WORK
R2 EQU 2 WORK
R3 EQU 3 WORK (NOT USED BY LOW LEVEL BAL RTNS)
R4 EQU 4 BIT OR BYTE RETURNED BY GBIT OR GBYTE (R4-R5 SLDL)
R5 EQU 5 CURRENT WORD
R6 EQU 6 BITS LEFT IN CURRENT WORD
R7 EQU 7 ADDRESS OF NEXT WORD PTR IN UT1RCD (R7-R9 BXLE)
R8 EQU 8 INCREMENT 4
R9 EQU 9 ADDRESS OF END OF UT1RCD
R10 EQU 10 LINK FOR LEVEL 2 ROUTINES
R11 EQU 11 WORK (NOT USED BY LOW LEVEL BAL RTNS)
R12 EQU 12 BASE
R13 EQU 13 BASE
R14 EQU 14 LINK FOR LEVEL 1 ROUTINES
R15 EQU 15 WORK
*
* PC/370 SVC'S
*
EXIT EQU 0
OPEN EQU 1
CLOSE EQU 2
GET EQU 5
PUT EQU 6
SEARCH EQU 8
TRACE EQU 9
GMAIN EQU 10
FMAIN EQU 11
ASCEBC EQU 12
EBCASC EQU 13
WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON.
*
* DATA AREAS
*
PSEQ DC PL4'0'
WORK DC F'0',X'0'
HEX DC XL8'0',X'0'
HEXTAB DC C'0123456789ABCDEF'
TBUFF EQU X'80' BUFFER FOR DIRECTORY SEARCH
UT1RCD DC XL128'00' LOGICAL RECORD AREA
UT2RCD DC CL80' '
PRTLINE DC CL133' '
DS CL2 PAD FOR ENDING CR,LF
ASCBLK EQU X'20' ASCII BLANK
ASCLF EQU X'0A' ASCII LINE FEED
ASCCR EQU X'0D' ASCII CARRIAGE RETURN
CR EQU X'0D' EBCDIC CARRIAGE RETURN
LF EQU X'25' EBCDIC LINE FEED
LNKTYP EQU X'04' EXTENDED TYPE 4 LINK RECORD USED BY A370
LNKRTN DC A(LT0,LT1,LT2,LT3,LT4,LT5,LT6,LT7,LT8) LINK TYPE RTNS
DC A(LT9,LTA,LTB,LTC,LTD,LTE,LTF)
OPTIONP DC AL1(TRUE) DEFAULT P ON
OPTIONC DC AL1(FALSE) DEFAULT C OFF
OPTIONL DC AL1(FALSE) DEFAULT L OFF
OPTHEX DC AL1(FALSE) SUM OF C AND L TO DETERMINE IF HEX NEEDED
TRUE EQU 1
FALSE EQU 0
OPTLINE DC C'T370 OPTIONS = '
DOPTP DC C'P' DEFAULT P ON FOR 370 OBJECT FILE
DOPTC DC C' ' DEFAULT C OFF FOR NO CONSOLE HEX LISTING
DOPTL DC C' ',C'$' DEFAULT L OFF FOR NO HEX LISTING FILE
LT4TYP DC X'00' TYPE OF ESD RECORD GENERATED BY A370.EXE
ESDSD EQU 1
ESDLD EQU 2
ESDER EQU 3
ESDORG EQU 4
ESDEND EQU 5
ESDRLD EQU 6 (SIGN AND LENGTH IN BITS 0-3)
LT4EID DC X'00' ESD NUMBER (1-255) FOR SD, LD, RLD, ORG
ASYMBOL DC A(0) POINTER TO SYMBOL DURING LT4B LOOP
SYMBOL DC CL8' ' ESD SYMBOL (SD, LD, AND ER)
SDLNG DC A(0) LENGTH OF SD (SD ONLY)
ADDR DC A(0) RELATIVE ADDRESS (LD, RLD, ORG)
RLDEID DC X'00' EID NUMBER FOR RLD VALUE
RLDLNG DC X'00' RLD LENGTH IN HIGH 4 BITS
TXTREGS DC A(TXTBUF,TXTBUF+L'TXTBUF,0)
TXTSAV DC A(0)
FMTSAV DC A(0)
ENDRCD DS 0XL80
DC X'02',C'END',CL1' '
ENDADDR DC XL3'00',CL6' '
ENDEID DC XL2'00',CL56' '
ENDSEQ DC ZL8'0'
RLDRCD DS 0XL80
DC X'02',C'RLD',CL6' '
RLDCNT DC XL2'00',CL4' '
RLDBUF DC CL56' '
RLDSEQ DC ZL8'0'
ESDRCD DS 0XL80
DC X'02',C'ESD',CL6' '
ESDCNT DC XL2'00',CL2' '
ESDEID DC XL2'00' EID OF FIRST ESD OR BLANK FOR LD
ESDBUF DC CL56' '
ESDSEQ DC ZL8'0'
TXTRCD DS 0XL80
DC X'02',C'TXT',C' '
TXTADDR DC XL3'00',CL2' '
TXTCNT DC XL2'00',CL2' '
TXTEID DC XL2'00'
TXTBUF DC CL56' '
TXTSEQ DC ZL8'0'
ENDLINE DS 0CL78
DC CL6' ZZZZZ'
DC C' END '
ENDDEID DC CL2' ',C' ' HEX EID OF CONTROL SECTION WITH RLD
ENDDADDR DC CL6' ',C' ' HEX ADDRESS
DC AL1(CR,LF),C'$'
DC (ENDLINE+L'ENDLINE-*)C' '
RLDLINE DS 0CL78
DC CL6' ZZZZZ'
DC C' RLD '
RLDDSID DC CL2' ',C' ' HEX EID OF CONTROL SECTION WITH RLD
RLDDADDR DC CL6' ',C' ' HEX ADDRESS
RLDDLNG DC CL2' ',C' ' HEX LENGTH
RLDDSGN DC CL1' ',C' ' C'+' OR C'-' SIGN
RLDDEID DC CL2' ' HEX EID OF SYMBOL
DC AL1(CR,LF),C'$'
DC (RLDLINE+L'RLDLINE-*)C' '
ESDLINE DS 0CL78
DC CL6' ZZZZZ'
DC C' ESD '
ESDDEID DC CL2' ',C' ' DECIMAL EID
ESDDADDR DC CL6' ',C' ' HEX ADDRESS
ESDDLNG DC CL6' ',C' ' HEX SD LENGTH
ESDDTYP DC CL2' ',C' '
ESDDSYM DC CL8' '
DC AL1(CR,LF),C'$'
DC (ESDLINE+L'ESDLINE-*)C' '
TXTLINE DS 0CL78
DC CL6' ZZZZZ'
DC C' TXT '
TXTDBLK DS 0CL13 BLANK FOR MULT. LINES
TXTDEID DC CL2' ',C' ' DECIMAL EID
TXTDADDR DC CL6' ',C' ' HEX ADDRESS
TXTDCNT DC CL2' ',C' ' HEX COUNT
TXTDHEX DC CL32' ',C' *'
TXTDASC DC CL16' ',C'*'
DC AL1(CR,LF),C'$'
DC (TXTLINE+L'TXTLINE-*)C' '
PRTASC DC 256C'.'
ORG PRTASC+C' '
DC C' '
DC C'ABCDEFGHI'
ORG PRTASC+C'A'
DC C'ABCDEFGHI'
ORG PRTASC+C'J'
DC C'JKLMNOPQR'
ORG PRTASC+C'S'
DC C'STUVWXYZ'
ORG PRTASC+C'0'
DC C'0123456789'
ORG PRTASC+256
****************************************************************************
*
* IHADCB - I HAD A DCB DSECT FOR PC/370 RELEASE 2.0+ FILE DATA CONTROL BLOCK
*
* FOR MORE INFORMATION SEE SVC.DOC AND DEMO PROGRAM TESTIO.ALC.
*
****************************************************************************
IHADCB DSECT
DCBDCB DS CL4 CONSTANT EBCDIC C'ADCB' DCB IDENTIFIER
DCBDSN DS A ADDRESS OF UP TO 64 BYTE PATH/FILE SPEC FOLLOWED BY ZERO
DCBFID DS H FILE HANDLE ASSIGNED BY MS-DOS AT OPEN (X'FFFF'DEFAULT)
DCBFLG DS X DATA CONTROL BLOCK FLAGS (ONLY DFTRAN MAY BE SET BY USER)
DFOPEN EQU X'80' FILE OPEN
DFUBUF EQU X'40' USER DEFINED BLOCK AREA (NO DYNAMIC ALLOC/DEALLOC)
DFOUT EQU X'20' OPEN FOR OUTPUT
DFGEOF EQU X'10' END OF FILE PENDING ON SHORT BLOCK
DFTRAN EQU X'08' TRANSLATE GET/PUT RECORDS FOR ASCII FILE
DFADCB EQU X'01' ASSIST DCB - DO NOT TRANSLATE 370 ADDRESSES
DSORG DS C DATA SET ORGANIZATION (R=RANDOM, S=SEQUENTIAL)
MACRF DS C DATA SET ACCESS MODE (R=READ, W=WRITE, G=GET, P=PUT)
RECFM DS C DATA SET RECORD FORMAT (F=FIXED, V=VAR, T=TEXT)
EOR DS X END OF RECORD CODE (DEFAULT IS LINE FEED X'0A')
EOF DS X END OF FILE CODE (DEFAULT IS CTL-Z X'1A')
LRECL DS H RECORD LENGTH (2<LRECL<64K-16)
BLKSZ DS H BLOCK LENGTH (2<BLKSZ<64K-16)
EODAD DS A END OF DATA EXIT ADDRESS
SYNAD DS A SYCHRONOUS ERROR EXIT ADDRESS
RCD DS A RECORD AREA ADDRESS FOR GET/PUT
BLK DS A BLOCK AREA ADDRESS (0 FOR DYNAMICALLY ALLOCATED)
RBA DS A RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
REN DS A RENAME ASCIIZ FILE (ONLY USED BY RENAME SVC)
IOCNT DS F BLOCK I/O COUNT SINCE OPEN
PRECL DS H PHYSICAL BLOCK SIZE OF LAST READ/WRITE
*
* RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
*
DSNSG DS XL4 SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
EODSG DS XL4 SEGMENT:OFFSET OF EODAD EXIT
SYNSG DS XL4 SEGMENT:OFFSET OF SYNAD EXIT
RCDSG DS XL4 SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
RENSG DS XL4 SEGMENT:OFFSET OF RENAME FILE NAME
BLKSG DS XL4 SEGMENT:OFFSET OF BLOCK AREA
BLKPTR DS XL4 SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
BLKEOD DS XL2 OFFSET OF CURRENT END OF DATA IN BLOCK AREA
BLKEND DS XL2 OFFSET OF END OF ALLOCATED BLOCK AREA
WLRECL DS H REVERSED LRECL
WBLKSZ DS H REVERSED BLKSZ
LDCB EQU *-IHADCB
*
* END OF DSECT
*
T370 CSECT
UT1DSN DC XL64'00'
UT1SFX DC C'.OBJ',X'00'
SYSUT1 DC 0F'0',C'ADCB'
DC A(UT1DSN) PATH/FILE NAME IN PARM
DC X'FFFF'
DC X'00'
DC C'SGF' SEQ. GET FIXED
DC X'0A1A'
DC H'128' LRECL
DC H'8192' BLKSZ
DC A(EOJ) EODAD
DC A(SYNRTN) SYNAD
DC A(UT1RCD) RECORD AREA
DC XL(SYSUT1+LDCB-*)'00'
UT2DSN DC XL64'00'
UT2SFX DC C'.370',X'00'
SYSUT2 DC 0F'0',C'ADCB'
DC A(UT2DSN) PATH/FILE NAME IN PARM
DC X'FFFF'
DC X'00'
DC C'SPF' SEQ. PUT FIXED
DC X'0A1A'
DC H'80' LRECL
DC H'8192' BLKSZ
DC A(SYNRTN) EODAD
DC A(SYNRTN) SYNAD
DC A(UT2RCD) RECORD AREA
DC XL(SYSUT2+LDCB-*)'00'
PRTDSN DC XL64'00'
PRTSFX DC C'.HEX',X'00'
SYSPRINT DC 0F'0',C'ADCB'
DC A(PRTDSN) PATH/FILE NAME IN PARM
DC X'FFFF'
DC AL1(DFTRAN)
DC C'SPT' SEQ. PUT TEXT
DC X'0A1A'
DC H'133' LRECL
DC H'8192' BLKSZ
DC A(SYNRTN) EODAD
DC A(SYNRTN) SYNAD
DC A(PRTLINE) RECORD AREA
DC XL(SYSPRINT+LDCB-*)'00'
SYNRTN EQU *
LA R2,=C'I/O ERROR$'
SVC WTO
SVC TRACE
DC C'BUG '
B SYNRTN
END T370